home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib15.dsk / APPLE M.A.T..bas < prev    next >
BASIC Source File  |  2023-02-26  |  15KB  |  247 lines

  1. 10  REM  **********************
  2. 11  REM  *   APPLE  M.A.T.    *
  3. 12  REM  *  BY  GLENN ARCHER  *
  4. 13  REM  * COPYRIGHT (C) 1983 *
  5. 14  REM  * BY MICROSPARC, INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 20  ONERR  GOTO 8000
  9. 25  FOR I = 1 TO 6: READ HE$(I): NEXT 
  10. 30  DATA  ARTICLE TITLE,VOLUME NUMBER,ISSUE NUMBER,PAGE NUMBER,CATEGORY,COMMENTS
  11. 40  TEXT : NORMAL : SPEED= 255:D$ =  CHR$(4):G$ =  CHR$(7)
  12. 43  IF  PEEK(768) = 29  THEN 100
  13. 45  HOME :X$ = " ": INVERSE :M =  -1
  14. 50  FOR CC = 19 TO 1  STEP  -1:M = M +2: VTAB 1: HTAB CC: PRINT X$: VTAB 1: HTAB CC +M: PRINT X$
  15. 55  VTAB 23: HTAB CC: PRINT X$: VTAB 23: HTAB CC +M: PRINT X$: NEXT 
  16. 56 M = 24: FOR CC = 1 TO 12:M = M -2: VTAB CC: HTAB 1: PRINT X$: VTAB CC: HTAB 39: PRINT X$: VTAB CC +M: HTAB 1: PRINT X$: VTAB CC +M: HTAB 39: PRINT X$: NEXT : NORMAL 
  17. 57  VTAB 5: HTAB 11: INVERSE : PRINT "A P P L E  M. A. T.": NORMAL 
  18. 60  VTAB 7: HTAB 3: PRINT "(MAGAZINE ARTICLE TRACKING SYSTEM)"
  19. 70  VTAB 9: HTAB 13: PRINT "BY GLENN ARCHER"
  20. 80  VTAB 11: HTAB 12: PRINT "DECEMBER 17, 1981": PRINT : HTAB 9: PRINT "** COPYRIGHT 1983 BY **": HTAB 9: PRINT "** MICROSPARC,  INC. **"
  21. 90  VTAB 18: HTAB 8: PRINT "PRESS ANY KEY TO CONTINUE";: GET A$
  22. 100  HOME : HTAB 3: INVERSE : PRINT "MAGAZINE ARTICLE TRACKING SYSTEM": VTAB 4: HTAB 13: FLASH : PRINT "MENU OPTIONS": NORMAL 
  23. 110  VTAB 6: PRINT  TAB( 7)"1. INITIALIZE A FILE": PRINT : PRINT  TAB( 7)"2. LOAD ANOTHER MAGAZINE": PRINT : PRINT  TAB( 7)"3. ADD ARTICLES"
  24. 120  PRINT : PRINT  TAB( 7)"4. CHANGE ARTICLES": PRINT : PRINT  TAB( 7)"5. DELETE ARTICLES": PRINT : PRINT  TAB( 7)"6. LIST ARTICLES"
  25. 130  PRINT : PRINT  TAB( 7)"7. FIND/SORT ARTICLES": PRINT : PRINT  TAB( 7)"8. EXIT THE PROGRAM"
  26. 140  VTAB 23: PRINT "WHICH OPTION WOULD YOU LIKE ?";
  27. 150  GET A$:A =  VAL(A$): IF A <1  OR A >8  THEN 150
  28. 155  ON A GOSUB 1000,2000,3000,4000,5000,6000,7000,59999
  29. 160  GOTO 100
  30. 200 FL = 0: IF MN$ = ""  THEN FL = 1
  31. 210  IF DA$(1) = ""  THEN FL = 1
  32. 220  IF NU = 0  THEN FL = 1
  33. 230  IF FL = 1  THEN  HOME : GOSUB 2010
  34. 240  IF  LEN(MN$) = 0  THEN  POP : RETURN 
  35. 250  RETURN 
  36. 1000  HOME :A$ = "INITIALIZE FILES": GOSUB 60000: PRINT : PRINT : PRINT "ENTER THE HEADINGS FOR THE DATA BASE:"
  37. 1020 NU = 1: VTAB 7: FOR I = 1 TO 6: PRINT  TAB( 7)I". "HE$(I): PRINT : NEXT 
  38. 1040  VTAB 21: PRINT "WHAT IS HEADING #"NU" ?";: GET A$: IF A$ =  CHR$(13)  AND NU = 1  THEN  RETURN 
  39. 1046  IF A$ =  CHR$(13)  THEN NU = NU -1: GOTO 1060
  40. 1047 A =  VAL(A$): IF A <1  OR A >6  THEN  PRINT : GOTO 1040
  41. 1050  VTAB 5 +(2 *A): HTAB 7: INVERSE : PRINT A: NORMAL :DA$(NU) = HE$(A): IF NU >5  THEN 1060
  42. 1057 NU = NU +1: GOTO 1040
  43. 1060  HOME : PRINT "THE HEADINGS, IN ORDER, ARE:": VTAB 5: FOR I = 1 TO NU: PRINT DA$(I): PRINT : NEXT 
  44. 1080  VTAB 21: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: IF A$ =  CHR$(13)  THEN  RETURN 
  45. 1090  IF A$ < >"Y"  THEN 1000
  46. 1100  HOME : PRINT "ENTER THE LENGTH OF EACH FIELD:": FOR I = 1 TO NU
  47. 1130  VTAB 3 +(I *2): PRINT I". "DA$(I);: HTAB 25: INPUT "";L$(I): IF  LEN(L$(I)) = 0  THEN 1130
  48. 1135 L(I) =  VAL(L$(I)): IF L(I) = 0  OR L(I) >63  THEN 1130
  49. 1140 L = L +L(I) +2: PRINT : NEXT 
  50. 1150  VTAB 21: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: IF A$ =  CHR$(13)  THEN  RETURN 
  51. 1165  IF A$ < >"Y"  THEN 1100
  52. 1180  HOME : VTAB 5: INPUT "WHAT IS THE NAME OF THE MAGAZINE ?";MN$: IF  LEN(MN$) = 0  THEN  RETURN 
  53. 1200 RD = 0
  54. 1210  PRINT D$"OPEN HEADER."MN$
  55. 1220  PRINT D$"DELETE HEADER."MN$
  56. 1230  PRINT D$"OPEN HEADER."MN$
  57. 1235  PRINT D$"WRITE HEADER."MN$
  58. 1240  PRINT L: PRINT NU
  59. 1245  FOR I = 1 TO NU: PRINT DA$(I): PRINT L(I): NEXT 
  60. 1250  PRINT D$"CLOSE HEADER."MN$
  61. 1255  PRINT D$"LOCK HEADER."MN$
  62. 1260  PRINT D$"OPEN DATA."MN$",L"L
  63. 1270  PRINT D$"WRITE DATA."MN$",R0"
  64. 1280  PRINT RD
  65. 1290  PRINT D$"CLOSE": RETURN 
  66. 2000  HOME :A$ = "LOAD A MAGAZINE": GOSUB 60000: VTAB 5
  67. 2010  PRINT : PRINT "ENTER THE NAME OF THE MAGAZINE OR ";: INVERSE : PRINT "*": NORMAL : INPUT "TO CATALOG: ";A$: IF A$ = "*"  THEN  PRINT D$"CATALOG": GOTO 2010
  68. 2020  IF  LEN(A$) = 0  THEN  RETURN 
  69. 2025 MN$ = A$
  70. 2030  PRINT D$"OPEN HEADER."MN$
  71. 2040  PRINT D$"READ HEADER."MN$
  72. 2050  INPUT L: INPUT NU
  73. 2060  FOR I = 1 TO NU: INPUT DA$(I): INPUT L(I): NEXT 
  74. 2070  PRINT D$"CLOSE HEADER."MN$
  75. 2080  PRINT D$"OPEN DATA."MN$",L"L
  76. 2090  PRINT D$"READ DATA."MN$",R0"
  77. 2100  INPUT RD
  78. 2110  PRINT D$"CLOSE"
  79. 2120  RETURN 
  80. 3000  GOSUB 200: HOME :A$ = "ADD A RECORD": GOSUB 60000
  81. 3010  VTAB 5: PRINT "FOR EACH RECORD, ENTER THE INFORMATION": PRINT "FOLLOWED BY A RETURN.  IF YOU MAKE A": PRINT "MISTAKE, PRESS THE <-- KEY TO ERASE THE": PRINT "PREVIOUS LETTER.  IF YOU WANT TO FINISH"
  82. 3020  PRINT "ADDING RECORDS, PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " WHEN ASKED FOR ";DA$(1)"."
  83. 3025  PRINT : PRINT "IF AT ANY TIME YOU WISH TO ABORT THE": PRINT "RECORD, PRESS CTRL-R TO RETURN TO MENU."
  84. 3030  VTAB 18:A$ = "PRESS ANY KEY TO BEGIN": GOSUB 60000
  85. 3040 X =  PEEK( -16384): IF X <128  THEN 3040
  86. 3055 RD = RD +1: IF RD >500  THEN  HOME : VTAB 11: PRINT "YOU CAN'T ENTER ANYMORE RECORDS. IF YOU": PRINT "WANT TO ADD MORE, CREATE ANOTHER FILE.": FOR I = 1 TO 3000: NEXT : RETURN 
  87. 3060  POKE  -16368,0: HOME : PRINT "RECORD #"RD: VTAB 3
  88. 3070  FOR I = 1 TO NU:M =  LEN(DA$(I)): IF M >K  THEN K = M +1
  89. 3080  NEXT 
  90. 3085  FOR X = 1 TO NU: PRINT DA$(X);: HTAB K: PRINT ":";: FOR I = 1 TO L(X): PRINT  CHR$(95);: NEXT 
  91. 3087  IF L(X) +K +1 >40  THEN  VTAB  PEEK(37)
  92. 3090  HTAB K +1:BE = 0:BD = 1: GOSUB 3200: PRINT : PRINT 
  93. 3105  IF ( LEN(BB$) = 0  AND X = 1)  OR B$ =  CHR$(18)  THEN RD = RD -1: RETURN 
  94. 3110 DI$(X) = BB$:BB$ = "": NEXT 
  95. 3120  VTAB 19: HTAB 1: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: PRINT : IF A$ =  CHR$(13)  THEN RD = RD -1: RETURN 
  96. 3125  IF A$ < >"Y"  THEN 3060
  97. 3151  PRINT D$"OPEN DATA."MN$",L"L
  98. 3160  PRINT D$"WRITE DATA."MN$",R"RD
  99. 3170  FOR I = 1 TO NU: PRINT  CHR$(34);DI$(I): NEXT 
  100. 3180  PRINT D$"CLOSE"
  101. 3195  GOSUB 1260: GOTO 3055
  102. 3200  REM  ** INPUT ROUTINE **
  103. 3210  GET B$: IF B$ =  CHR$(13)  OR B$ =  CHR$(18)  THEN  RETURN 
  104. 3220  IF B$ =  CHR$(8)  THEN 3260
  105. 3230  IF B$ < CHR$(32)  THEN 3210
  106. 3232  IF B$ =  CHR$(34)  THEN 3210
  107. 3233  IF BE = 1  THEN  PRINT  CHR$(7);: GOTO 3210
  108. 3234 BD = 0
  109. 3235  IF  LEN(BB$) = L(X)  THEN  PRINT  CHR$(7);:BE = 1: GOTO 3210
  110. 3240 BB$ = BB$ +B$: PRINT B$;:B$ = "": GOTO 3210
  111. 3260  IF BD = 1  THEN  PRINT  CHR$(7);: HTAB K +1: GOTO 3210
  112. 3265  IF  LEN(BB$) <2  THEN BB$ = "":BD = 1: GOTO 3280
  113. 3270 BB$ =  LEFT$(BB$, LEN(BB$) -1)
  114. 3280 BE = 0: PRINT  CHR$(8); CHR$(95); CHR$(8);: GOTO 3210
  115. 4000  GOSUB 200: HOME :A$ = "CHANGE AN ARTICLE": GOSUB 60000: VTAB 5
  116. 4006  IF RD = 0  THEN  PRINT "THERE ARE NO RECORDS.": FOR I = 1 TO 2000: NEXT : RETURN 
  117. 4010  INPUT "RECORD # TO CHANGE (-99 FOR ALL) ?";M1$: IF  LEN(M1$) = 0  OR  VAL(M1$) = 0  THEN  RETURN 
  118. 4025 M1 =  VAL(M1$): IF M1 >RD  THEN 4000
  119. 4030  IF M1 <0  THEN M2 = 1:M3 = RD: GOTO 4050
  120. 4040 M2 = M1:M3 = M2
  121. 4045  VTAB 9
  122. 4050  VTAB 9: PRINT : PRINT "AFTER EACH RECORD, I WILL ASK IF YOU": PRINT "WANT IT CHANGED. IF NOT, I WILL READ IN": PRINT "THE NEXT RECORD. IF YOU DO WANT IT": PRINT "CHANGED, THEN THE CURSOR WILL BE DIS-"
  123. 4060  PRINT "PLAYED AT THE BEGINNING OF THE DATA. IF": PRINT "YOU WISH TO SKIP THE DATA, PRESS RETURN": PRINT "TO GO ON TO THE NEXT LINE OR CTRL-R FOR": PRINT "NEXT RECORD. OTHERWISE, ENTER IN DATA."
  124. 4090  VTAB 21:A$ = "PRESS ANY KEY TO BEGIN": GOSUB 60000
  125. 4100 X =  PEEK( -16384): IF X <128  THEN 4100
  126. 4110  HOME : POKE  -16368,0
  127. 4120  FOR E = M2 TO M3
  128. 4130  PRINT "RECORD #"E: VTAB 5: GOSUB 6500: GOSUB 6300
  129. 4170  VTAB 3 +(X *2) +2: PRINT "CHANGE THIS RECORD ?";: GET A$: IF A$ =  CHR$(13)  THEN  RETURN 
  130. 4190  IF A$ < >"Y"  THEN  HOME : NEXT : RETURN 
  131. 4205  PRINT 
  132. 4210  FOR X = 1 TO NU: VTAB 3 +(2 *X): HTAB K +1:BE = 0:BD = 0: GOSUB 3200
  133. 4220  IF B$ =  CHR$(13)  AND  LEN(BB$) = 0  THEN  NEXT : GOTO 4250
  134. 4230  IF B$ =  CHR$(18)  THEN X = NU: NEXT : HOME : NEXT : RETURN 
  135. 4240 DI$(X) = BB$:BB$ = "": NEXT 
  136. 4250  VTAB 3 +(2 *X) +2: HTAB 1: CALL  -958: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: IF A$ =  CHR$(13)  THEN  RETURN 
  137. 4270  IF A$ < >"Y"  THEN  HOME : GOTO 4130
  138. 4290  PRINT 
  139. 4300  PRINT D$"OPEN DATA."MN$",L"L
  140. 4310  PRINT D$"WRITE DATA."MN$",R"E
  141. 4320  FOR T = 1 TO NU: PRINT  CHR$(34);DI$(T): NEXT 
  142. 4330  PRINT D$"CLOSE"
  143. 4340  HOME : NEXT : RETURN 
  144. 5000  GOSUB 200: HOME :A$ = "DELETE AN ARTICLE": GOSUB 60000: VTAB 5
  145. 5015  IF RD = 0  THEN  PRINT "THERE ARE NO RECORDS TO DELETE.": FOR I = 1 TO 2000: NEXT : RETURN 
  146. 5020  PRINT "WHICH RECORD TO ";: FLASH : PRINT "DELETE";: NORMAL : INPUT " ";M3$: IF  LEN(M3$) = 0  THEN  RETURN 
  147. 5040 M3 =  VAL(M3$): IF M3 <1  OR M3 >RD  THEN 5000
  148. 5050  PRINT : PRINT "ARE YOU SURE (YES/N)";: INPUT A$: IF A$ < >"YES"  THEN  RETURN 
  149. 5060  IF M3 < >RD  THEN 5080
  150. 5070 RD = RD -1: GOTO 1260
  151. 5080 E = RD: GOSUB 6500
  152. 5090  PRINT D$"OPEN DATA."MN$",L"L
  153. 5100  PRINT D$"WRITE DATA."MN$",R"M3
  154. 5110  FOR I = 1 TO NU: PRINT  CHR$(34);DI$(I): NEXT 
  155. 5120  PRINT D$"CLOSE"
  156. 5130  GOTO 5070
  157. 6000  GOSUB 200: HOME :A$ = "LIST AN ARTICLE(S)": GOSUB 60000: GOSUB 6400
  158. 6010  IF PR = 1  THEN  PRINT D$"PR#1"
  159. 6020  FOR E = M1 TO M2: HOME : PRINT "RECORD #";E: GOSUB 6500: GOSUB 6300
  160. 6030  PRINT 
  161. 6045  PRINT D$"PR#0"
  162. 6050  VTAB 3 +(2 *X) +2: INVERSE : PRINT "RETURN TO QUIT OR OTHER TO CONTINUE";: NORMAL : GET A$: IF A$ =  CHR$(13)  THEN PR = 0: RETURN 
  163. 6083  IF PR = 1  THEN  PRINT : PRINT D$"PR#1"
  164. 6085  NEXT 
  165. 6087  PRINT : PRINT D$"PR#0"
  166. 6088  HOME : VTAB 11:A$ = "THAT'S ALL": GOSUB 60000: FOR I = 1 TO 3000: NEXT :PR = 0: RETURN 
  167. 6300  FOR X = 1 TO NU:M =  LEN(DA$(X)): IF M >K  THEN K = M +1
  168. 6310  NEXT 
  169. 6315  IF PR = 1  THEN 6330
  170. 6320  FOR X = 1 TO NU: VTAB 3 +(2 *X): PRINT DA$(X); TAB( K);":";DI$(X): PRINT : NEXT : RETURN 
  171. 6330  PRINT : FOR X = 1 TO NU: PRINT DA$(X);: TAB( K - LEN(DA$(X)));":";DI$(X): NEXT : PRINT : PRINT : RETURN 
  172. 6400  VTAB 5: PRINT "THERE ARE "RD" RECORDS."
  173. 6405  IF RD = 0  THEN  VTAB 5: PRINT "THERE AREN'T ANY RECORDS TO LIST.": FOR I = 1 TO 3000: NEXT : POP : RETURN 
  174. 6410  VTAB 7: INPUT "WHAT IS THE STARTING RECORD TO LIST ?";M1$: IF  LEN(M1$) = 0  THEN  POP : RETURN 
  175. 6420  IF  VAL(M1$) <1  OR  VAL(M1$) >RD  THEN 6410
  176. 6430 M1 =  VAL(M1$): VTAB 9: INPUT "WHAT IS THE ENDING RECORD TO LIST ?";M2$: IF  VAL(M2$) <M1  OR  VAL(M2$) >RD  THEN 6430
  177. 6440 M2 =  VAL(M2$): VTAB 11: PRINT "DO YOU WANT IT ON THE PRINTER ?";: GET A$: PRINT A$: IF A$ < >"Y"  AND A$ < >"N"  THEN 6440
  178. 6450  IF A$ = "Y"  THEN  PRINT D$"PR#1":PR = 1
  179. 6460  RETURN 
  180. 6500  PRINT D$"OPEN DATA."MN$",L"L
  181. 6510  PRINT D$"READ DATA."MN$",R"E
  182. 6520  FOR I = 1 TO NU: INPUT DI$(I): NEXT 
  183. 6530  PRINT D$"CLOSE"
  184. 6540  RETURN 
  185. 7000  HOME :A$ = "FIND/SORT OPTION": GOSUB 60000
  186. 7020  VTAB 5: PRINT "DO YOU WANT TO FIND OR SORT (F OR S) ?";: GET A$: IF A$ =  CHR$(13)  THEN  RETURN 
  187. 7040  IF A$ = "S"  THEN 7500
  188. 7050  IF A$ < >"F"  THEN 7000
  189. 7060  GOSUB 200: HOME :A$ = "FIND OPTION": GOSUB 60000
  190. 7065  IF RD = 0  THEN  VTAB 5: PRINT "THERE ARE NO RECORDS TO FIND ANYTHING.": FOR J = 1 TO 3000: NEXT : RETURN 
  191. 7070  VTAB 5: INPUT "WHICH STRING TO SEARCH FOR ?";ST$: IF  LEN(ST$) = 0  THEN  RETURN 
  192. 7090  VTAB 7: FOR I = 1 TO NU: PRINT I". "DA$(I): PRINT : NEXT 
  193. 7100  VTAB 23: INPUT "WHICH NUMBER TO SEARCH ON ?";H$:H =  VAL(H$): IF H <1  OR H >NU  THEN 7100
  194. 7125  HOME : GOSUB 6440: IF PR = 1  THEN  PRINT D$"PR#1"
  195. 7130  PRINT : PRINT D$;"OPEN DATA."MN$",L"L: FOR E = 1 TO RD: HOME : PRINT D$"READ DATA."MN$",R"E: FOR I = 1 TO NU: INPUT DI$(I): NEXT 
  196. 7140 A$ = DI$(H)
  197. 7150  FOR I = 1 TO  LEN(A$) - LEN(ST$) +1
  198. 7160  IF  MID$ (A$,I, LEN(ST$)) = ST$  THEN  PRINT "RECORD #"E: GOSUB 6300: GOTO 7180
  199. 7170  NEXT : GOTO 7200
  200. 7180  PRINT D$"PR#0": VTAB 20: INVERSE : PRINT "RETURN TO EXIT OR OTHER TO CONTINUE";: NORMAL : GET A$: PRINT : IF A$ =  CHR$(13)  THEN PR = 0: RETURN 
  201. 7190  IF PR = 1  THEN  PRINT : PRINT D$"PR#1"
  202. 7200  NEXT E:PR = 0: PRINT D$"PR#0"
  203. 7210  HOME : VTAB 12:A$ = "THAT'S ALL!!": GOSUB 60000: FOR I = 1 TO 2000: NEXT : RETURN 
  204. 7500  GOSUB 200: HOME :A$ = "SORT OPTION": GOSUB 60000: VTAB 4: IF RD <2  THEN  PRINT "YOU CAN'T SORT LESS THAN 2 RECORDS.": FOR I = 1 TO 3000: NEXT : RETURN 
  205. 7510  FOR I = 1 TO NU: PRINT I;". ";DA$(I): PRINT : NEXT 
  206. 7520  VTAB 23: INPUT "WHICH HEADING TO SORT ON ?";H$: IF  LEN(H$) = 0  THEN  RETURN 
  207. 7530 H =  VAL(H$): IF H <1  OR H >NU  THEN 7520
  208. 7535  DIM A$(NU,RD),N$(RD): POKE 768,29
  209. 7540  HOME : VTAB 11: HTAB 15: FLASH : PRINT "READING DISK";G$: NORMAL 
  210. 7550  PRINT D$"OPEN DATA."MN$",L"L
  211. 7560  FOR I = 1 TO RD
  212. 7570  PRINT D$"READ DATA."MN$",R"I
  213. 7580  FOR J = 1 TO H: INPUT N$(I): NEXT :B$ =  STR$(I)
  214. 7581  IF  LEN(B$) = 1  THEN N$(I) = N$(I) +"00": GOTO 7583
  215. 7582  IF  LEN(B$) = 2  THEN N$(I) = N$(I) +"0"
  216. 7583 N$(I) = N$(I) +B$
  217. 7590  NEXT 
  218. 7600  PRINT D$"CLOSE"
  219. 7605  HOME : VTAB 11: HTAB 17: FLASH : PRINT "SORTING";G$: NORMAL 
  220. 7610  FOR I = 1 TO RD -1: FOR J = I +1 TO RD: IF N$(I) < = N$(J)  THEN 7630
  221. 7620 T$ = N$(I):N$(I) = N$(J):N$(J) = T$
  222. 7630  NEXT J,I:Q = 2
  223. 7640  HOME : VTAB 6: HTAB 14: FLASH : PRINT "SORT COMPLETED";G$;G$;G$: NORMAL 
  224. 7650  VTAB 9: PRINT "DO YOU WANT TO SEE THE SORTED LIST ?";: GET A$: PRINT A$: IF A$ < >"Y"  THEN 7700
  225. 7660  GOSUB 6440: FOR Q = 1 TO RD: HOME : PRINT "RECORD #"Q:E =  VAL( RIGHT$(N$(Q),3)): GOSUB 6500: FOR J = 1 TO NU:A$(J,Q) = DI$(J): NEXT : GOSUB 6300: PRINT D$"PR#0"
  226. 7670  VTAB 3 +(2 *X) +2: INVERSE : PRINT "RETURN TO QUIT OR OTHER TO CONTINUE";: NORMAL : GET A$: PRINT : IF A$ =  CHR$(13)  THEN PR = 0:Q = Q +1: GOTO 7700
  227. 7680  IF PR = 1  THEN  PRINT D$"PR#1"
  228. 7690  NEXT 
  229. 7700  HOME : VTAB 5: PRINT D$;"PR#0": PRINT "DO YOU WANT TO SAVE THE SORTED FILE ?";: GET A$: PRINT A$: IF A$ < >"Y"  THEN  RUN 
  230. 7705  HOME : VTAB 11: HTAB 15: FLASH : PRINT "WRITING FILE";G$: NORMAL 
  231. 7710  PRINT D$"OPEN DATA."MN$",L"L: FOR F = Q -1 TO RD: PRINT D$"READ DATA."MN$",R" VAL( RIGHT$(N$(F),3)): FOR J = 1 TO NU: INPUT A$(J,F): NEXT : NEXT 
  232. 7715  PRINT D$"CLOSE": PRINT D$"OPEN DATA."MN$",L"L
  233. 7720  FOR I = 1 TO RD: PRINT D$"WRITE DATA."MN$",R"I
  234. 7730  FOR J = 1 TO NU: PRINT  CHR$(34);A$(J,I): NEXT : NEXT 
  235. 7740  PRINT D$"CLOSE": RUN 
  236. 8000 ERR =  PEEK(222): IF ERR = 255  THEN  RESUME 
  237. 8005  HOME : PRINT D$"PR#0": NORMAL : VTAB 5: PRINT G$
  238. 8010  IF ERR = 4  THEN  PRINT "DISK IS WRITE-PROTECTED. PLACE ANOTHER  IN DISK DRIVE.": GOTO 8200
  239. 8020  IF ERR = 5  THEN  PRINT "END OF DATA. I BET YOU ENTERED A WRONG  FILENAME!!!": PRINT D$;"UNLOCK HEADER."MN$: PRINT D$;"DELETE HEADER."MN$:MN$ = "": GOTO 8200
  240. 8030  IF ERR = 6  THEN  PRINT "FILE NOT FOUND!! YOU MUST HAVE ENTERED  THE WRONG FILENAME!!": GOTO 8200
  241. 8040  IF ERR = 8  THEN  PRINT "I/O ERROR. CHECK DRIVE DOOR.": GOTO 8200
  242. 8050  IF ERR = 9  THEN  PRINT "DISK FULL. PLACE ANOTHER IN DISK DRIVE.": GOTO 8200
  243. 8060  IF ERR = 10  THEN  PRINT "YOU <CTRL-A>ALREADY HAVE A FILE BY THAT NAME.": GOTO 8200
  244. 8070 LI =  PEEK(218) + PEEK(219) *256: PRINT "ERROR #"ERR" IN LINE #"LI".": PRINT "CHECK APPLESOFT MANUAL, PAGE 136.": END 
  245. 8200  PRINT : PRINT "PRESS ANY KEY FOR MAIN MENU.";: GET A$: GOTO 100
  246. 59999  HOME : POP : POKE 768,2: END 
  247. 60000  PRINT  TAB( 20 - LEN(A$)/2);A$: RETURN